#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include "mdichild.h"
#include <QMainWindow>
#include <QMdiSubWindow>
#include <QAction>
#include <QSignalMapper>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void updateMenus(); // 更新菜单
    MdiChild *createMdiChild(); // 创建子窗口
    void setActiveSubWindow(QObject *object); // 设置活动子窗口
    void updateWindowMenu(); // 更新窗口菜单
    void readSettings(); // 读取窗口设置
    void writeSettings(); // 写入窗口设置
    void showTextRowAndCol(); // 显示文本的行号和列号

    void on_actionNew_triggered();

    void on_actionOpen_triggered();

    void on_actionSave_triggered();

    void on_actionUndo_triggered();

    void on_actionClose_triggered();

    void on_actionSaveAs_triggered();

    void on_actionExit_triggered();

    void on_actionRedo_triggered();

    void on_actionCut_triggered();

    void on_actionCopy_triggered();

    void on_actionPaste_triggered();

protected:
    void closeEvent(QCloseEvent *event); // 关闭事件

private:
    Ui::MainWindow *ui;
    QAction *actionSeparator; // 间隔符
    MdiChild *activeMdiChild(); // 活动窗口
    QMdiSubWindow *findMdiChild(const QString &filename); // 查找子窗口
    QSignalMapper *windowMapper; // 信号映射器
    void initWindow(); // 初始化窗口
};
#endif // MAINWINDOW_H
